内核编译流程
- 拉取适合本机型的内核源码
- 下载内核编译工具
- 配置内核编译环境编译
- 修改编译内核配置
- 手机刷内核
拉取内核源码
根据手机运行的系统从github上获取内核的源码,一般有官方开源的内核(较难编译)、第三方原生系统的内核。
对应的开源内核版本一般根据处理器型号进行对应。一般在arch/arm64/config 中存在机型对应的配置。
第三方原生系统在xda中一般会连带对应的kernel地址。
下载内核编译工具
内核编译工具有多种,不同的内核可能需要不同的编译工具。推荐下载,其中包含多种gcc编译工具使用。
配置内核编译环境
内核编译需要配置一些环境变量:
export ARCH=arm64
export SUBARCH=arm64
export CROSS_COMPILE=内核编译工具的路径,一般到aarch64-linux-gnu-
export CROSS_COMPILE32=32为内核编译工具的路径,一般到aarch64-linux-gnu-
# 选择内核编译的配置,如小米5:gemini 一般在arch/arm64/config 中存在机型对应的配置。
<NolebasePageProperties />
make O=out 机型代码_defconfig
# 对内核进行编译,一般需要10分钟以上 $(nproc)是多线程,一般cpu数*2
make O=out -j$(nproc)
# 如在编译时环境变量不生效,可将变量带到make中
# 如: make ARCH=arm64 SUBARCH=arm64 gemini_defconfig修改编译内核配置
# 在选择机型配置之后进行,命令执行后会开启修改配置的页面
# 使用说明: / 可以开启搜索功能,输入配置键名称,可以查询到是否开启 y开启 n关闭 存在多个时有需要,按对应数字和进行跳转
# 部分选项的开启依赖于其他配置项 depends下配置,需要将依赖项开启后该配置项才是开启状态
make menuconfig
# 配置修改后,可对内核进行编译。
# 注意:部分选项开启后可能会导致手机不开机!手机刷内核
方式一:使用AIK
XDA下載Linux版Android Image Kitchen (點選文中的AIK-Linux-v3.8-ALL.tar.gz附件)
- 使用aik需要获取手机的boot.img,提取方式:
手機進入TWRP → Advanced → Terminal,使用dd指令從手機提取原廠的boot.img。
dd if=/dev/block/bootdevice/by-name/boot of=/sdcard/stockboot.img将提取到的boot.img文件放到下载的aik解压目录中,将img解包得到split_img目录
./unpackimg.sh stockboot.img将split_img目录中的stockboot.img-kernel替换成编译完成后的Image.gz-dtb(编译完成后会在arch/arm64/boot 目录中生成该文件)
在aik的解压目录中,将img重新打包,得到image-new.img刷入到手机boot分区。
sh./repackimg.sh
内核编译开启docker示例:小米5
内核开启过程需先进行编译,测试是否编译成功,和手机刷入后是否正常启动。
预编译
下载内核源码,本例子使用的是Floppy Kernel内核,其中存在build.sh脚本,可搭配内核编译以脚本方式直接编译源码。
注意,内核编译工具是与内核文件夹同一路径的Toolchain文件夹下。
在内核文件夹执行 ./build.sh 脚本,需先授予执行权限
chmod 777 build.sh。根据脚本选择机型和编译工具,如需编译配置,需要先退出脚本,参考
修改编译内核配置进行配置,配置后重新执行脚本。(需选择机型)第五六步执行完成后,内核编译就完成了,参考
手机刷内核将编译的内核刷入手机(注意备份原内核)。
开启docker
手机执行检测脚本,需先安装termux并root。
安装ssh
shpkg install openssh # 设置密码 passwd # 查看用户 whoami # 查看ip ip addr ifconfig # 开启ssh sshdshpkg install tsu pkg install wget wget https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh chmod +x check-config.sh sed -i '1s_.*_#!/data/data/com.termux/files/usr/bin/bash_' check-config.sh sudo ./check-config.sh脚本执行结果中Generally Necessary下面必须要全部是绿色才有可能安装Docker,其他 尽量保持全绿
注意:部分选项内核中不存在,部分选项开启后可能会导致手机无法启动。如:测试的小米5的btrfs下配置开启会导致无法开机
对内核配置进行编译
在预编译的第三步,将检测脚本中的红色项进行开启,全部开启后进行编译刷入到手机。
手机安装docker
shapt update && apt upgrade -y pkg install root-repo pkg install golang make cmake ndk-multilib tsu tmux docker启动docker
shsudo DOCKER_RAMDISK=true dockerd --iptables=false # 后台启动 sudo dockerd --iptables=false &>/dev/null & # 测试功能 sudo docker run hello-world # 如果有需要使用如下指令挂载cgroup sudo mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup注意事项:
docker网络需使用 net 模式,访问网络需要带 dns 及在doker运行时添加
--net=host --dns=114.114.114.114termux安装的服务的路径是在
/data/data/com.termux/files/usr下,docker 默认的文件格式有可能不支持,需要修改daemon.json 文件中的文件格式,docker才能正常启动文件默认位置不在 Termux 数据目录,在系统根目录 data/docker/
安装服务
sh# 安装Portainer sudo docker run -d -p 9000:9000 --name Portainer --net=host --restart=always -v /data/docker/run/docker.sock:/var/run/docker.sock portainer/portainer # 安装mysql sudo docker run -p 3306:3306 --net=host --name mysql --privileged=true -v /data/data/com.termux/files/home/mysql/log:/var/log/mysql -v /data/data/com.termux/files/home/mysql/data:/var/lib/mysql -v /data/data/com.termux/files/home/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql/mysql-server
参考文章
手机运行Docker: 从修改内核到刷入原生Linux | yzddMr6's Blog